/**
 * 动态函数
 * @param script 函数脚本
 * @param model 函数数据
 * @param paramName 函数参数名 ($) => $.name == "张三";
 * @return 验证结果 函数脚本执行结果
 */
export function dynamicFun(script: string, model: object, paramName = '$') {
  // 如果没有提供脚本，直接返回 false
  if (!script) return false

  // 确定是否包含 return 语句，如果没有，则包裹成返回表达式
  const func =
    script.indexOf('return') >= 0
      ? '{' + script + '}' // 如果有 return 语句，则直接包裹成函数体
      : 'return (' + script + ')' // 如果没有 return，则将其转为返回表达式

  const Fn = new Function(paramName, func) // 创建函数，只有 key 作为参数
  return Fn(model) // 执行函数，传入 model 作为参数
}
